package EncuestasDAO;

import EncuestasDTO.EncuestaDTO;
import EncuestasDTO.PreguntaDTO;
import Herramientas.EnteroEnteroDTO;
import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Alan Gonzalez
 */
public class PreguntasDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public PreguntasDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ | METODO QUE SELECCIONA TODAS LAS PREGUNTAS
     *
     * @return
     */
    public Vector seleccionarTodaPregunta() {
        Vector v = new Vector();
        db.openDatabase();
        String query = "select * from admin_preguntas where estado > 0";
        ResultSet rst = null;
        rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                PreguntaDTO p = new PreguntaDTO();
                p = res.preguntaDTO(rst);
                v.add(p);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PreguntasDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return v;
    }

    /**
     * ALAN GONZALEZ RAZO METODO PARA CREAR UNA NUEVA PREGUNTA
     *
     * @param pergunta
     */
    public void nuevaPreunta(PreguntaDTO p) {
        db.openDatabase();
        String query = "";
        if (p.getTipoPregunta() == 2) {
            query += "  INSERT INTO admin_preguntas SET";
            query += "   folio_pregunta =" + p.getFolioPregunta();
            query += " , pregunta='" + p.getPregunta() + "'";
            query += " , tipo_pregunta=" + p.getTipoPregunta();
            query += " , n_respuestas_posibles=" + p.getRespuestaPosibles();
            query += " , respuesta_correcta='" + p.getRespuesaCorrecta() + "'";
            query += " , estado=1";
            db.execute(query);
        } else if (p.getTipoPregunta() == 1) {
            query += "  INSERT INTO admin_preguntas SET";
            query += "   folio_pregunta =" + p.getFolioPregunta();
            query += " , pregunta='" + p.getPregunta() + "'";
            query += " , tipo_pregunta=" + p.getTipoPregunta();
            query += " , n_respuestas_posibles=" + p.getRespuestaPosibles();
            query += " , estado=1";
            db.execute(query);
        }
        db.closeDatabase();
    }

    /**
     *
     * @param idPregunta
     */
    public void borrarPregunta(int idPregunta) {
        db.openDatabase();
        String query = "update admin_preguntas set estado = 0 where id=" + idPregunta;
        db.execute(query);
        db.closeDatabase();
    }

   /**
    * ALAN GONZALEZ ASIGNACION / PREGUNTA ENCUESTA
    * @param estadoCheck
    * @param folioPregunta
    * @param encuestaDTO 
    */
    public void asignacion(int estadoCheck, double folioPregunta, EncuestaDTO encuestaDTO) {
        db.openDatabase();
        switch (estadoCheck) {
            case 1:
                // check encendido
                // antes de crear un nuevo registro se buscan
                String qBuscarAsignacion
                        = " select count(*) as contador  from admin_asignacion where folio_pregunta ="
                        + folioPregunta + " and folio_encuesta=" + encuestaDTO.getFolio();
                int banderaExiste = 0;
                ResultSet rst0 = null;
                rst0 = db.executeQuery(qBuscarAsignacion);
                try {
                    while (rst0.next()) {
                        banderaExiste = rst0.getInt("contador");
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(PreguntasDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (banderaExiste > 0) {
                    // se reactiva la asignacion
                    int id = this.obtenerIDAsignacion(folioPregunta, encuestaDTO);
                    db.openDatabase();
                    String qActualizarAsignacion = " update admin_asignacion set estado=1 where id=" + id;
                    db.execute(qActualizarAsignacion);
                } else if (banderaExiste == 0) {
                    String queryInserta = "INSERT INTO admin_asignacion SET";
                    queryInserta += "   folio_encuesta=" + encuestaDTO.getFolio();
                    queryInserta += " , folio_pregunta=" + folioPregunta;
                    queryInserta += " , estado=1";
                    db.execute(queryInserta);
                }
                break;
            case 2: // check apagado
                String qBuscarAsignacion2
                        = " select count(*) as contador  from admin_asignacion where folio_pregunta ="
                        + folioPregunta + " and folio_encuesta=" + encuestaDTO.getFolio();
                int banderaExiste2 = 0;
                ResultSet rst2 = null;
                rst2 = db.executeQuery(qBuscarAsignacion2);
                try {
                    while (rst2.next()) {
                        banderaExiste2 = rst2.getInt("contador");
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(PreguntasDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (banderaExiste2 > 0) {
                    // se reactiva la asignacion
                    int id = this.obtenerIDAsignacion(folioPregunta, encuestaDTO);
                    db.openDatabase();
                    String qActualizarAsignacion = " update admin_asignacion set estado=0 where id=" + id;
                    db.execute(qActualizarAsignacion);
                } else if (banderaExiste2 == 0) {
                    String queryInserta = "INSERT INTO admin_asignacion SET";
                    queryInserta += "   folio_encuesta=" + encuestaDTO.getFolio();
                    queryInserta += " , folio_pregunta=" + folioPregunta;
                    queryInserta += " , estado=0";
                    db.execute(queryInserta);
                }
                break;
        }
        db.closeDatabase();
    }

/**
 * ALAN GONZALEZ
 * @param folioPregunta
 * @param encuestaDTO
 * @return 
 */
    public int obtenerIDAsignacion(double folioPregunta, EncuestaDTO encuestaDTO) {
        db.openDatabase();
        int id = 0;
        String query
                = " SELECT * FROM admin_asignacion "
                + " WHERE"
                + " folio_pregunta =" + folioPregunta
                + " AND"
                + " folio_encuesta =" + encuestaDTO.getFolio();
        ResultSet rst = null;
        rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                id = rst.getInt("id");
            } else {
                id = 0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(PreguntasDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return id;
    }

    /**
     * ALAN GONZALEZ METODO ARA BUSCAR UNA ASIGNACION Y SU ESTADO
     *
     * @param folioPregunta
     * @param folioEncuesta
     * @return
     */
    public int buscarAsignacion(double folioPregunta, double folioEncuesta) {
        int bandera = 0;
        String query = "select * from admin_asignacion where ";
        query += " folio_pregunta=" + folioPregunta;
        query += " and";
        query += " folio_encuesta=" + folioEncuesta;
        query += " and";
        query += " estado = 1";
        ResultSet rst = null;
        db.openDatabase();
        rst = db.executeQuery(query);
        try {
            if(rst.next()){
            bandera=1;
            }else{
            bandera=0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(PreguntasDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return bandera;
    }
}
